import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:zootix/store/zt_auth.store.dart';

class ZtStorageService extends GetxService {
  static ZtStorageService get to => Get.find();
  late final SharedPreferences _prefs;

  Future<ZtStorageService> init() async {
    _prefs = await SharedPreferences.getInstance();
    return this;
  }

  Future<bool> setString(String key, String value,
      {bool isWithUser = true}) async {
    String storeKey = key;
    if (isWithUser) {
      storeKey = '${ZtAuthStore.to.userInfo.value.userId}_$key';
    }
    return await _prefs.setString(storeKey, value);
  }

  Future<bool> setBool(String key, bool value, {bool isWithUser = true}) async {
    String storeKey = key;
    if (isWithUser) {
      storeKey = '${ZtAuthStore.to.userInfo.value.userId}_$key';
    }
    return await _prefs.setBool(storeKey, value);
  }

  Future<bool> setInt(String key, int value, {bool isWithUser = true}) async {
    String storeKey = key;
    if (isWithUser) {
      storeKey = '${ZtAuthStore.to.userInfo.value.userId}_$key';
    }
    return await _prefs.setInt(storeKey, value);
  }

  Future<bool> setList(String key, List<String> value,
      {bool isWithUser = true}) async {
    String storeKey = key;
    if (isWithUser) {
      storeKey = '${ZtAuthStore.to.userInfo.value.userId}_$key';
    }
    return await _prefs.setStringList(storeKey, value);
  }

  String? getString(String key, {bool isWithUser = true}) {
    String storeKey = key;
    if (isWithUser) {
      storeKey = '${ZtAuthStore.to.userInfo.value.userId}_$key';
    }
    return _prefs.getString(storeKey);
  }

  int? getInt(String key, {bool isWithUser = true}) {
    String storeKey = key;
    if (isWithUser) {
      storeKey = '${ZtAuthStore.to.userInfo.value.userId}_$key';
    }
    return _prefs.getInt(storeKey);
  }

  bool? getBool(String key, {bool isWithUser = true}) {
    String storeKey = key;
    if (isWithUser) {
      storeKey = '${ZtAuthStore.to.userInfo.value.userId}_$key';
    }
    return _prefs.getBool(storeKey) ?? false;
  }

  List<String> getList(String key, {bool isWithUser = true}) {
    String storeKey = key;
    if (isWithUser) {
      storeKey = '${ZtAuthStore.to.userInfo.value.userId}_$key';
    }
    return _prefs.getStringList(storeKey) ?? [];
  }

  Future<bool> remove(String key, {bool isWithUser = true}) async {
    String storeKey = key;
    if (isWithUser) {
      storeKey = '${ZtAuthStore.to.userInfo.value.userId}_$key';
    }
    return await _prefs.remove(storeKey);
  }

  //Warning. if you use this method, all users data will be deleted
  Future<bool> clear() async {
    return await _prefs.clear();
  }
}
